package com.startest.sms.dao;


import com.startest.sms.pojo.Permission;
import com.startest.sms.pojo.Role;
import com.startest.sms.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Repository
@Mapper
public interface UserMapper {

    //添加用户角色表
    void addUserRole(Map<String, Integer> map);

    //查询用户拥有的角色list
    List<Integer> selectRoleIdsByUserId(@Param("userId") Integer userId);

    //级联删除用户角色表中用户
    void deleteUserRoleByUserId(@Param("userId") Integer userId);

    //删除用户
    void deleteUser(@Param("userId") Integer userId);

    //添加用户
    void addUser(User user);

    //修改用户
    void updateUser(User user);

    //查询userlist
    List<User> selectUserList();

    //添加权限
    void addPerm(Permission perm);

    //级联删除角色权限表中权限
    void deletePermRole(@Param("permId") Integer permId);

    //删除权限表中权限
    void deletePerm(@Param("permId") Integer permId);

    //修改权限
    void updatePerm(Permission perm);

    //修改角色
    void updateRole(Role role);

    //增加角色
    void addRole(Role role);

    //查询角色
    List<Role> selectRoleList();

    //删除角色
    void deleteRole(@Param("roleId") Integer roleId);

    //级联删除角色权限表中对应角色
    void deleteUserRoleByRoleId(@Param("roleId") Integer roleId);

    //级联删除用户角色表中数据
    void deletePermRoleByRoleId(@Param("roleId") Integer roleId);


    //单表查询权限
    List<Permission> selectPermList();

    //角色分配权限
    void addRolePerm(Map parm);

    //角色删除权限
    void deleteRolePerm(@Param("roleId") Integer roleId);

    //查询角色拥有的权限
    List<Integer> selectPermsByRoleId(@Param("roleId") Integer roleId);

    /**
     * 查询该名称的用户数量
     * @param userName
     * @return
     */
    int countUserName(@Param("userName") String userName);


    /**  可废除
     * 根据用户名密码查询用户
     * @param username
     * @param encryptPassword
     * @return
     */
    int selectUser(@Param("username") String username,
                   @Param("pwd") String encryptPassword);
    /**
     * 获取盐
     * @param username
     * @return
     */
    String getSalt(@Param("username") String username);

    //邮箱注册
    int insertByEmail(@Param("username") String username,
                      @Param("pwd") String encryptPassword,
                      @Param("salt") String salt,
                      @Param("email") String email,
                      @Param("emailCode") String emailCode,
                      @Param("state") int state);
    //邮箱激活
    int selectByEmailCode(@Param("code") String code);

    //更改邮箱激活码
    void updateEmailCode(@Param("id") Integer id);

    /** 可废除
     * 根据token查找用户*/
    User selectUserByToken(@Param("token") String token,
                           @Param("datetime") Date datetime);
    //手机号查询
    int selectByPhone(@Param("phone") String phone);

    //手机号注册
    int insertByPhone(@Param("username") String username,
                      @Param("phone") String phone);

    //shiro框架 根据用户名查找用户
    User selectUserByName(@Param("username") String username);

    //shiro框架 根据手机号查找用户
    User selectUserByPhone(@Param("phone") String phone);

    //通过用户查询角色list
    List<Role> selectRolesByUser(User user);

    //通过角色查询权限list
    List<Permission> selectPermsByRole(Role role);

}
